package 简单.双指针;

/**
 * 给你一个按 非递减顺序 排序的整数数组 nums，返回 每个数字的平方 组成的新
 * 数组，要求也按 非递减顺序 排序。
 *
 * @ https://leetcode.cn/problems/squares-of-a-sorted-array/description/?envType=daily-question&envId=2024-09-08
 * @date 2024/09/08
 */
public class 有序数组的平方_977 {

    public static void main(String[] args) {

        System.out.println(true || false && false);
        System.out.println((true || false) && false);

    }

    /**
     * 双指针
     * 左指针开始位置为数组中最后一个负数索引，指针往左移动
     * 右指针开始位置为数组第一个正数索引，指针向右移动
     */
    public int[] sortedSquares(int[] nums) {
        int left = -1, right = nums.length;

        for (int i = 0; i < nums.length; i++) {
            if (nums[i] >= 0) {
                right = i;
                break;
            }
            if (nums[i] < 0) {
                left = i;
            }
        }

        int[] ans = new int[nums.length];

        for (int i = 0; i < ans.length; i++) {
            int num;
            if (left < 0 || (right < nums.length && Math.abs(nums[left]) >= nums[right])) {
                num = nums[right] * nums[right];
                right++;
            } else {
                num = nums[left] * nums[left];
                left--;
            }
            ans[i] = num;
        }
        return ans;
    }

}
